home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / mac / util / imagctlg.sit / Make Twin≈ ƒ / Partial Source / RawToSCMI.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-18  |  1.4 KB  |  59 lines  |  [TEXT/KAHL]

  1. #include <stdio.h>
  2. #include "rawfmt.h"
  3.  
  4. RawToSCMI(HFileInfo *hp, raw_t *img)
  5. {
  6.     long n;
  7.     int i, err;
  8.     uchar *p, *p2, *buf;
  9.     int refNum;
  10.     
  11.     /* create and open file */
  12.     if ((err=HCreate(hp->ioVRefNum, hp->ioDirID, hp->ioNamePtr, '????', 'SCMI')) != noErr) {
  13.         PtoCstr((char *)hp->ioNamePtr);
  14.         if (err == dupFNErr)
  15.             fprintf(stderr,"  %s: RawToSCMI: File already exists\n",hp->ioNamePtr);
  16.         else
  17.             fprintf(stderr,"  %s: RawToSCMI: Create err = %d\n",hp->ioNamePtr,err);
  18.         return;
  19.     }
  20.     
  21.     if ((err=HOpen(hp->ioVRefNum, hp->ioDirID, hp->ioNamePtr, fsRdWrPerm, &refNum)) != noErr) {
  22.         PtoCstr((char *)hp->ioNamePtr);
  23.         fprintf(stderr,"%s: RawToSCMI: HOpen err = %d\n",hp->ioNamePtr,err);
  24.         return;
  25.     }
  26.     
  27.     p = buf = (uchar *)NewPtr(1024L);
  28.  
  29.     sprintf((char *)p,"SCMI%4u",1);        /* version */
  30.     p += 8;
  31.     sprintf((char *)p,"AT%8lu%4u%4u%4u",12L,img->width,img->height,img->ncolors);
  32.     p += 22;
  33.     sprintf((char *)p,"CM%8lu",img->ncolors*3L);
  34.     p += 10;
  35.  
  36.     p2 = (uchar *)img->cmap;
  37.     for (i=0; i<img->ncolors*3; i++)
  38.         *p++ = *p2++;
  39.     
  40.     /* Pixel Data */
  41.     sprintf((char *)p,"PD%8lu",(long)img->width * (long)img->height);
  42.     p += 10;
  43.     
  44.     n = p-buf;
  45.     if ((err=FSWrite(refNum, &n, buf)) == noErr) {
  46.         n = (long)img->width * (long)img->height;
  47.         err=FSWrite(refNum, &n, img->data);
  48.     }
  49.     if (err) {
  50.         PtoCstr((char *)hp->ioNamePtr);
  51.         fprintf(stderr,"  %s: RawToSCMI: FSWrite err  = %d\n",hp->ioNamePtr,err);
  52.     }
  53.     DisposPtr(buf);
  54.     
  55.     FSClose(refNum);
  56. }
  57.  
  58.  
  59.